import js from '@eslint/js';
import globals from 'globals';
import reactHooks from 'eslint-plugin-react-hooks';
import reactRefresh from 'eslint-plugin-react-refresh';
import tseslint from 'typescript-eslint';
import prettier from 'eslint-plugin-prettier';
import eslintPluginImport from 'eslint-plugin-import'; // 添加 import 插件

export default tseslint.config(
  { ignores: ['dist'] }, // 忽略 dist 目录
  {
    extends: [
      js.configs.recommended, // ESLint 推荐规则
      ...tseslint.configs.recommended, // TypeScript 推荐规则
      'plugin:prettier/recommended', // Prettier 推荐配置
      'plugin:import/recommended', // 添加 import 插件推荐配置
      'plugin:import/typescript', // 支持 TypeScript 的 import 解析
    ],
    files: ['**/*.{ts,tsx}'], // 针对 TypeScript 文件
    languageOptions: {
      ecmaVersion: 2020, // ECMAScript 版本
      globals: globals.browser, // 浏览器全局变量
      parserOptions: {
        project: './tsconfig.json', // 指向 tsconfig.json
      },
    },
    settings: {
      'import/resolver': {
        typescript: {
          // 支持 TypeScript 路径别名解析
          alwaysTryTypes: true, // 优先使用 TypeScript 解析
          project: './tsconfig.json', // 指向 tsconfig.json
        },
        alias: {
          // 配置路径别名
          map: [
            ['@', './src'], // @ -> src
            ['@base', './base'], // @base -> base
            ['@domain', './domain'], // @domain -> domain
          ],
          extensions: ['.ts', '.tsx', '.js', '.jsx'], // 支持的文件扩展名
        },
      },
    },
    plugins: {
      'react-hooks': reactHooks, // React Hooks 插件
      'react-refresh': reactRefresh, // React Refresh 插件
      prettier, // Prettier 插件
      import: eslintPluginImport, // 添加 import 插件
    },
    rules: {
      ...reactHooks.configs.recommended.rules, // React Hooks 推荐规则
      'react-refresh/only-export-components': [
        'warn',
        { allowConstantExport: true },
      ],
      'prettier/prettier': 'error', // 启用 Prettier 规则
      'import/no-unresolved': 'error', // 确保导入路径正确
      'import/order': [
        // 规范导入顺序
        'error',
        {
          groups: [
            'builtin',
            'external',
            'internal',
            'parent',
            'sibling',
            'index',
          ],
          'newlines-between': 'always',
          alphabetize: {
            order: 'asc',
            caseInsensitive: true,
          },
        },
      ],
    },
  },
);
